import vueRouter from '@/router'
import axios from './index'
import $axios from 'axios'
import { appVersion } from '@/config'
import { transformFormData } from '@/libs/util'

const getAppId = () => {
    const route = vueRouter?.currentRoute?.value
    return route.params.appId || ''
}

/**
* @description 保存 app 数据
* @param {String} appId
* @param {String} templateId
* @param {Number} IsDynamicData 数据动态化(0关闭，1开启)
* @param {Number} NeedNewVersion 有无新版本(0无新版本，1有新版本)
* @param {Object} params 请求参数
*/
export const saveApp = ({ appId, templateId = '', params = {} }) => {
    appId ??= getAppId()
    return axios.request({
        url: `api/app/saveApp?app_id=${appId}&templeId=${templateId}`,
        data: transformFormData({
            ...params,
            AppVersion: appVersion // 应用版本号
            // DataJSON: '',
            // IsDynamicData: 0, 
            // NeedNewVersion: 0 
        }),
        method: 'post'
    })
}

/**
* @description 保存 app 数据(阿里云)
* @param {String} url 请求地址
* @param {String} data 请求参数
*/
export const saveAppAliyun = ({ url, data }) => {
    url = location.protocol.includes('https') ? url.replace('http', 'https') : url
    data.DataJson.appId ??= getAppId()
    return $axios({
        url: url,
        headers: {
            'Content-Type': 'application/json'
        },
        data: { data },
        method: 'put'
    })
}

/**
* @description 获取 app 数据(阿里云)
* @param {String} url 请求地址
*/
export const getAppAliyun = url => axios.request({
    url,
    headers: {
        Authorization: null,
        'APP_ID': null,
        'Content-Type': 'application/json'
    },
    method: 'get'
})

// 获取app数据
/**
* @description 获取app数据
* @param {String} appId
* @param {String} historyId
*/
export const getApp = ({ appId, historyId } = {}) => {
    appId ??= getAppId()
    return axios.request({
        url: 'api/app/getApp',
        params: {
            'app_id': appId,
            'history_id': historyId
        },
        method: 'get'
    })
}

// 获取app列表
export const getAppList = () => axios.request({
    url: 'api/app/getAppList',
    method: 'get'
})

// 删除指定app
export const deleteApp = appId => {
    appId ??= getAppId()
    return axios.request({
        url: `api/app/deleteApp?app_id=${appId}`,
        method: 'post'
    })
}

// // 获取数据对象
// export const getObject = id => axios.request({
//     url: 'api/app/getObject',
//     params: {
//         'Id': id
//     },
//     method: 'get'
// })

// /**
// * @description 保存/新建数据对象
// * @param {String} name
// * @param {String} description
// * @param {String} data
// * @param {String} app_id
// * @param {String} id
// */
// export const saveObject = ({ name, description, data, app_id, id = '' }) => {
//     app_id ??= getAppId()
//     return axios.request({
//         url: 'api/app/saveObject',
//         data: transformFormData({
//             Name: name,
//             Description: description,
//             Data: data,
//             AppId: app_id,
//             Id: id
//         }),
//         method: 'post'
//     })
// }

// 获取数据对象分类列表
export const getObjectCategoryList = ({ id, page = 1, pageSize = 20 }) => axios.request({
    url: 'api/app/getObjectCategoryList',
    data: transformFormData({
        ObjectId: id,
        Page: page,
        PageSize: pageSize
    }),
    method: 'post'
})

// 获取数据对象分类分组列表
export const getObjectCategoryGroupList = ({ appId, id }) => {
    appId ??= getAppId()
    return axios.request({
        url: 'api/app/objectCategoryGroupList',
        params: {
            AppId: appId,
            ObjectId: id
        },
        method: 'get'
    })
}

// 获取图片分类
export const getImgCategory = id => axios.request({
    url: 'api/app/img/category',
    data: transformFormData({
        Id: id
    }),
    method: 'post'
})

// 获取图片分类列表
export const getImgCategoryList = () => axios.request({
    url: 'api/app/img/category/list',
    method: 'post'
})

// 删除图片分类
export const deleteImgCategory = id => axios.request({
    url: `api/app/img/category/${id}`,
    method: 'delete'
})

/**
* @description 修改图片分类名称
* @param {String} id 分类ID
* @param {String} name 分类名称
*/
export const updateImgCategoryName = ({ id, name }) => axios.request({
    url: `api/app/img/category/${id}/${name}`,
    method: 'put'
})

// 获取图片列表
export const getImgList = ({ id, page = 1, pageSize = 100 }) => axios.request({
    url: 'api/app/img/list',
    params: {
        CategoryId: id,
        Page: page,
        PageSize: pageSize
    },
    method: 'get'
})

// 上传图片
export const uploadImg = ({ id, memberId, appId, file }) => {
    appId ??= getAppId()
    return axios.request({
        url: 'api/app/img/upload',
        data: transformFormData({
            CategoryId: id,
            MemberId: memberId,
            AppId: appId,
            file: file
        }),
        method: 'post'
    })
}

// 保存/新建图片分类
export const saveImgCategory = name => axios.request({
    url: 'api/app/img/category/save',
    data: transformFormData({
        Name: name
    }),
    method: 'post'
})

// 删除图片
export const deleteImg = id => axios.request({
    url: `api/app/img/${id}`,
    method: 'delete'
})

// // 删除图片分类
// export const deleteImgCategory = id => axios.request({
//   url: `api/app/img/category/${id}`,
//   method: 'delete'
// })

// // 获取文章分类列表
// export const getArticleCategoryList = appId => {
//     appId ??= getAppId()
//     return axios.request({
//         url: '/api/cms/admin/category/list',
//         data: transformFormData({
//             appId,
//             tree: 1
//         }),
//         method: 'post'
//     })
// }

// /**
//  * 获取api接口列表
//  * @param {1} appId 应用程序id
//  * @param {2} type  获取数据类型  details详情列表  list数据列表
//  */
// export const getApiList = ({ appId, type = 'list' }) => {
//     appId ??= getAppId()
//     return axios.request({
//         url: 'api/app/getApiList',
//         params: {
//             AppId: appId,
//             Type: type
//         },
//         method: 'get'
//     })
// }

// /**
//  * 获取api详情
//  * @param {1} id api接口id
//  */
// export const getApiDetails = ({ appId, name, id = '' }) => {
//     appId ??= getAppId()
//     return axios.request({
//         url: 'api/app/getApiDetails',
//         params: {
//             AppId: appId,
//             Name: name,
//             Id: id
//         },
//         method: 'get'
//     })
// }

// 获取插件列表
export const getPluginList = (type = '') => axios.request({
    url: '/api/app/plugin/list',
    params: {
        'Type': type
    },
    method: 'get'
})

// 获取单个插件详情
export const getPlugin = id => axios.request({
    url: '/api/app/plugin',
    params: {
        'Id': id
    },
    method: 'get'
})

// 获取插件分类列表
export const getPluginCategorys = appId => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/plugin/category/list',
        params: {
            'AppId': appId
        },
        method: 'get'
    })
}

// // 获取我的插件列表
// export const getUserPluginList = appId => {
//     appId ??= getAppId()
//     return axios.request({
//         url: '/api/app/plugin/user/get/pluginList',
//         params: {
//             'AppId': appId
//         },
//         method: 'get'
//     })
// }

// 获取模板分类列表 dynamic(动态分类)、industry(行业)、odule(组件)、cutPage(单页)
export const getTemplateCategorys = (code = '') => axios.request({
    url: '/api/app/template/category/list',
    params: {
        code
    },
    method: 'get'
})

// 获取组件类的模板分类列表 (自由面板、营销...)
export const getModuleTemplateCategorys = id => axios.request({
    url: '/api/app/template/category/list/byId',
    params: {
        Id: id
    },
    method: 'get'
})

// 获取组件类的模板数据 (自由面板、营销...)
export const getModuleTemplateData = ({ id, page = 1, pageSize = 20 }) => axios.request({
    url: '/api/app/template/category',
    params: {
        CategoryId: id,
        Page: page,
        PageSize: pageSize
    },
    method: 'get'
})

/**
 * 根据分类ID获取分类下全部模板数据 (自由面板、营销...)
 * bkffsat6r2fhnf171400 组合模板库id
 * bkffsjt6r2fhnf17140g 自由面板id
 * bkffspt6r2fhnf17141g 滑动面板id
 * bkffo156r2fhnf1713lg 动态分类库id
 */
export const getCategoryAllTmplData = ({ id, page = 1, pageSize = 20 }) => axios.request({
    url: '/api/app/template/getCategoryAllTmplData',
    params: {
        Id: id,
        Page: page,
        PageSize: pageSize
    },
    method: 'get'
})

// 获取四大分类(单页、组件、动态分类、行业)下的所有模板的全部[公共] (code 四大分类的code)
export const getTemplateDataAll = ({ code, page = 1, pageSize = 20 }) => axios.request({
    url: '/api/app/template/bycode',
    params: {
        Code: code,
        Page: page,
        PageSize: pageSize
    },
    method: 'get'
})

/**
 * 添加为系统模板
 * @param {1} categoryId 系统模板分类id
 * @param {2} id 模板id
 */
export const saveSysTemplate = ({ categoryId, id = '' }) => axios.request({
    url: '/api/app/template/save/sysTemplate',
    data: transformFormData({
        CategoryId: categoryId,
        TemplateId: id
    }),
    method: 'post'
})

// 获取我的模板分类列表
export const getUserTemplateCategorys = appId => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/template/category/user/list',
        params: {
            AppId: appId
        },
        method: 'get'
    })
}

// 获取我的模板数据
export const getUserTemplateData = ({ appId, id, page = 1, pageSize = 20 }) => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/template/user/list',
        params: {
            AppId: appId,
            CategoryId: id,
            Page: page,
            PageSize: pageSize
        },
        method: 'get'
    })
}

/**
* @description 添加/修改我的模板分类
* @param {String} appId
* @param {String} title
* @param {Number} pId 创建一级时pId为0，创建子级时pId为上一级的id
* @param {String} id
*/
export const saveUserTemplateCategory = ({ appId, title, pId = 0, id = '' }) => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/template/user/category/save',
        data: transformFormData({
            AppId: appId,
            Title: title,
            Pid: pId,
            Id: id
        }),
        method: 'post'
    })
}

// 删除我的模板分类
export const deleteUserTemplateCategory = id => axios.request({
    url: `/api/app/template/category/user/delete/${id}`,
    method: 'delete'
})

/**
 * @description 收藏模板
 * @param {1} appId
 * @param {2} categoryId 我的模板分类 id
 * @param {3} title 模板名称
 * @param {4} data 模板数据
 * @param {5} cover 模板缩略图
 * @param {6} sort 权重
 * @param {7} type 类型 page(单页)/comb(组合)
 * @param {8} id 模板 id (新建为空，修改则非空)
 */
export const saveUserTemplate = ({ appId, categoryId, title, data, cover, sort, type, id = '' }) => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/template/user/save',
        data: transformFormData({
            'AppId': appId,
            'CategoryId': categoryId,
            'Title': title,
            'Data': data,
            'Cover': cover,
            'Sort': sort,
            'Type': type,
            'Id': id
        }),
        method: 'post'
    })
}

// 删除我的模板
export const deleteUserTemplate = id => axios.request({
    url: `/api/app/template/user/remove/${id}`,
    method: 'delete'
})

// 获取用户开启的模块
export const getUserModuleData = appId => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/module/getModule',
        params: {
            AppId: appId
        },
        method: 'get'
    })
}

// // 获取 app 模板分类列表
// export const getAppTemplateCategorys = appId => {
//     appId ??= getAppId()
//     return axios.request({
//         url: '/api/app/template/app/category/getList',
//         method: 'get'
//     })
// }

// // 获取分类下的 app 模板列表
// export const getAppTemplates = ({ categoryId, page = 1, pageSize = 20 }) => axios.request({
//     url: '/api/app/template/app/getTemplateList',
//     params: {
//         Id: categoryId,
//         Page: page,
//         PageSize: pageSize
//     },
//     method: 'get'
// })

/**
 * @description 获取模块文章数据
 * @param {1} appId
 * @param {2} dataType (如: cms$article)
 * @param {3} categoryId 分类 id
 * @param {4} keywords 关键字 (搜索)
 * @param {5} page
 * @param {6} pageSize
 */
export const getModuleCommonData = ({ appId, dataType, categoryId, keywords, page = 1, pageSize = 10000 }) => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/getModuleCommonData',
        params: {
            AppId: appId,
            DataType: dataType,
            CategoryId: categoryId,
            Keywords: keywords,
            Page: page,
            PageSize: pageSize
        },
        method: 'get'
    })
}

/**
 * @description 获取跳转小程序列表
 * @param {String} appId
 * @param {Number} page
 * @param {Number} pageSize
 */
export const getXcxWhiteList = ({ appId, page = 1, pageSize = 10000 } = {}) => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/system/whitelist/list',
        params: {
            AppId: appId,
            Page: page,
            PageSize: pageSize
        },
        method: 'get'
    })
}

// 获取模块对象列表
export const getModuleObjectList = appId => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/getModuleObjectList',
        params: {
            AppId: appId
        },
        method: 'get'
    })
}

/**
 * @description 获取模块对象文章列表
 * @param {String} appId
 * @param {String} dataType 数据类型
 * @param {String} categoryId 分类ID
 * @param {String} page 当前页
 * @param {String} pageSize 页数
 * @param {String} keywords 搜索关键词
 */
export const getModuleObjectDataList = ({ appId, dataType = 'cms$article', categoryId, page = 1, pageSize = 5, keywords }) => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/getModuleCommonData',
        params: {
            AppId: appId,
            DataType: dataType,
            CategoryId: categoryId,
            Page: page,
            PageSize: pageSize,
            Keywords: keywords
        },
        method: 'get'
    })
}

/**
 * @description 获取模块对象/文章字段列表
 * @param {String} appId
 * @param {String} dataType 数据类型(为 cms$article 时获取文章字段列表)
 * @param {String} objectId 对象ID
 */
export const getModuleObjectFields = ({ appId, dataType, objectId, dataSourceType = '' }) => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/getModuleObjectFields',
        params: {
            AppId: appId,
            DataType: dataType,
            ObjectId: objectId,
            DataSourceType: dataSourceType
        },
        method: 'get'
    })
}

// /**
//  * @description 获取对象详情
//  * @param {String} appId
//  * @param {String} dataType 数据类型
//  * @param {String} objectId 对象ID
//  */
// export const getModuleObjectDataInfo = ({ appId, dataType, objectId }) => {
//     appId ??= getAppId()
//     return axios.request({
//         url: '/api/app/getModuleObjectDataInfo',
//         params: {
//             AppId: appId,
//             DataType: dataType,
//             ObjectId: objectId
//         },
//         method: 'get'
//     })
// }

/**
 * @description 获取模块页面数据
 * @param {String} appId
 * @param {String} code 模块code值
 */
export const getModuleSourceUrl = ({ appId, code }) => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/module/getModuleSourceUrl',
        params: {
            AppId: appId,
            ModuleCode: code
        },
        method: 'get'
    })
}

/**
 * 获取用户角色列表
 * @param {String} appId
 */
export const getUserRoleList = appId => {
    appId ??= getAppId()
    return axios.request({
        url: '/api/app/user/role/list',
        params: {
            AppId: appId
        },
        method: 'get'
    })
}

/**
 * 获取模块方法列表
 * @param {String} appId
 * @param {String} id
 * @param {String} dataType
 */
export const getModuleMethodListByObjectId = ({ appId, id, dataType }) => {
    appId ??= getAppId()
    return axios.request({
        url: 'api/app/getModuleMethodListByObjectId',
        params: {
            app_id: appId,
            id,
            dataType
        },
        method: 'get'
    })
}

/**
* 获取模块方法详情
* @param {String} id 方法ID
*/
export const getModuleMethod = ids => axios.request({
    url: '/api/app/getModuleMethod',
    params: {
        ids
    },
    method: 'get'
})

/**
 * @description 获取表单列表
 * @param {Number} page 当前页数
 * @param {Number} pageSize 一页条数
 * @param {String} keyword 搜索内容
 * @param {String} type 1获取新的应用数据，0获取旧的应用数据，为空时获取全部
 */
 export const getObjectList = ({ page, pageSize, keyword = '', type = '' }) => axios.request({
    url: '/admin/obj/GetObjectList',
    data: `page=${page}&page_size=${pageSize}&keyword=${keyword}&type=${type}`,
    method: 'post'
})

/**
 * @description 获取预约列表
 * @param {Number} page 当前页数
 * @param {Number} pageSize 一页条数
 * @param {String} keyword 搜索内容
 */
 export const getBookList = ({ page, pageSize, keyword = '' }) => axios.request({
    url: '/admin/book/GetBookList',
    data: `page=${page}&page_size=${pageSize}&keyword=${keyword}`,
    method: 'post'
})

/**
 * @description 获取互动列表
 * @param {Number} page 当前页数
 * @param {Number} pageSize 一页条数
 * @param {String} keyword 搜索内容
 */
 export const getConfigList = ({ page, pageSize, keyword = '' }) => axios.request({
    url: '/admin/game/GetConfigList',
    data: `page=${page}&page_size=${pageSize}&keyword=${keyword}`,
    method: 'post'
})

/**
 * @description 获取投票列表
 * @param {Number} page 当前页数
 * @param {Number} pageSize 一页条数
 * @param {String} keyword 搜索内容
 */
 export const getVoteListByAppID = ({ page, pageSize, keyword = '' }) => axios.request({
    url: '/admin/vote/GetVoteListByAppID',
    data: `page=${page}&page_size=${pageSize}&keyword=${keyword}`,
    method: 'post'
})

/**
 * @description 获取模板消息
 * @param {Number} page 当前页数
 * @param {Number} pageSize 一页条数
 * @param {String} keyword 搜索内容
 */
 export const getMessageTemplateList = ({ page, pageSize, keyword = '' }) => axios.request({
    url: '/appAdmin/GetMessageTemplateList',
    data: `page=${page}&page_size=${pageSize}&keyword=${keyword}`,
    method: 'post'
})